Micron Document
NexusPi Git Node


Displaying Raw • Download

native/EEPROMShim.h HEAD (592c826d) Text, 2.18 KB

T8b949e// Copyright (C) 2026, Chad Attermann
T8b949e//
T8b949e// File-backed EEPROM shim for the native Linux build. Stands in for the
T8b949e// Arduino <EEPROM.h> library so the existing config-load/save paths in
T8b949e// Utilities.h (eeprom_conf_load, eeprom_conf_save, eeprom_info_locked,
T8b949e// etc.) work without per-platform forks.
T8b949e//
T8b949e// Storage model: an in-memory byte array of EEPROM_SIZE, flushed to
T8b949e// ./eeprom (relative to CWD, set by --data-dir before setup() runs)
T8b949e// when EEPROM.commit() is called or on graceful shutdown.

Tff7b72#Tff7b72ifndef NATIVE_EEPROM_SHIM_H
Tff7b72#Tff7b72define NATIVE_EEPROM_SHIM_H

Tff7b72#Tff7b72include T8b949e<cstddef>
Tff7b72#Tff7b72include T8b949e<cstdint>
Tff7b72#Tff7b72include T8b949e<cstdio>
Tff7b72#Tff7b72include T8b949e<cstring>
Tff7b72#Tff7b72include T8b949e<string>
Tff7b72#Tff7b72include T8b949e<vector>

Te6edf3class Te6edf3EEPROMClass Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3EEPROMClassTb4b4b4(Tb4b4b4) Tff7b72: Te6edf3path_Tb4b4b4(Ta5d6ff"Ta5d6ffeepromTa5d6ff"Tb4b4b4) Tb4b4b4{Tb4b4b4}

T8b949e// Arduino API surface used by Utilities.h
Tffa657void Te6edf3beginTb4b4b4(Te6edf3stdTff7b72:Tff7b72:Tffa657size_t Te6edf3sizeTb4b4b4) Tb4b4b4{
Te6edf3buf_Tb4b4b4.Te6edf3assignTb4b4b4(Te6edf3sizeTb4b4b4, T79c0ff0xFFTb4b4b4)Tb4b4b4;
Tffa657FILETff7b72* Te6edf3f Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3fopenTb4b4b4(Te6edf3path_Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3fTb4b4b4) Tb4b4b4{
Te6edf3stdTff7b72:Tff7b72:Te6edf3freadTb4b4b4(Te6edf3buf_Tb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3fTb4b4b4)Tb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3fcloseTb4b4b4(Te6edf3fTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657uint8_t Te6edf3readTb4b4b4(Tffa657int Te6edf3addrTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3addr Tff7b72< T79c0ff0 Tff7b72|Tff7b72| Te6edf3static_castTff7b72<Te6edf3stdTff7b72:Tff7b72:Tffa657size_tTff7b72>Tb4b4b4(Te6edf3addrTb4b4b4) Tff7b72>Tff7b72= Te6edf3buf_Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72return T79c0ff0xFFTb4b4b4;
Tff7b72return Te6edf3buf_Tb4b4b4[Te6edf3addrTb4b4b4]Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3writeTb4b4b4(Tffa657int Te6edf3addrTb4b4b4, Tffa657uint8_t Te6edf3valTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3addr Tff7b72< T79c0ff0 Tff7b72|Tff7b72| Te6edf3static_castTff7b72<Te6edf3stdTff7b72:Tff7b72:Tffa657size_tTff7b72>Tb4b4b4(Te6edf3addrTb4b4b4) Tff7b72>Tff7b72= Te6edf3buf_Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3buf_Tb4b4b4[Te6edf3addrTb4b4b4] Tff7b72!Tff7b72= Te6edf3valTb4b4b4) Tb4b4b4{
Te6edf3buf_Tb4b4b4[Te6edf3addrTb4b4b4] Tff7b72= Te6edf3valTb4b4b4;
Te6edf3dirty_ Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}

T8b949e// Arduino's EEPROM.update() writes only if value changed (avoiding
T8b949e// flash wear on real hardware); our write() already short-circuits.
Tffa657void Te6edf3updateTb4b4b4(Tffa657int Te6edf3addrTb4b4b4, Tffa657uint8_t Te6edf3valTb4b4b4) Tb4b4b4{ Te6edf3writeTb4b4b4(Te6edf3addrTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4; Tb4b4b4}

Tffa657bool Te6edf3commitTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3dirty_Tb4b4b4) Tff7b72return Tffa657trueTb4b4b4;
Tffa657FILETff7b72* Te6edf3f Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3fopenTb4b4b4(Te6edf3path_Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fTb4b4b4) Tff7b72return Tffa657falseTb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Tffa657size_t Te6edf3wrote Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3fwriteTb4b4b4(Te6edf3buf_Tb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4, Te6edf3buf_Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3fTb4b4b4)Tb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3fcloseTb4b4b4(Te6edf3fTb4b4b4)Tb4b4b4;
Te6edf3dirty_ Tff7b72= Tb4b4b4(Te6edf3wrote Tff7b72!Tff7b72= Te6edf3buf_Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72!Te6edf3dirty_Tb4b4b4;
Tb4b4b4}

T8b949e// Set before begin() if the default ./eeprom path is unwanted.
Tffa657void Te6edf3set_pathTb4b4b4(Tff7b72const Te6edf3stdTff7b72:Tff7b72:Te6edf3stringTff7b72& Te6edf3pTb4b4b4) Tb4b4b4{ Te6edf3path_ Tff7b72= Te6edf3pTb4b4b4; Tb4b4b4}

Te6edf3privateTff7b72:
Te6edf3stdTff7b72:Tff7b72:Te6edf3vectorTff7b72<Tffa657uint8_tTff7b72> Te6edf3buf_Tb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3string Te6edf3path_Tb4b4b4;
Tffa657bool Te6edf3dirty_ Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72extern Te6edf3EEPROMClass Te6edf3EEPROMTb4b4b4;

Tff7b72#Tff7b72endif T8b949e// NATIVE_EEPROM_SHIM_H

Served by rngit 1.5.2 - Generated in 0.02s